package ru.pb.game.configs;

import java.io.IOException;

import org.apache.log4j.Logger;

import ru.pb.global.configs.Config;
import ru.pb.global.utils.ExitCode;

public class GameThreadingConfig
{
	private static final Logger _log = Logger.getLogger(GameNetworkConfig.class);

	private static final String FileName = "./configs/threading.ini";

	/** Интервал проверок дедлоков */
	public static int DEADLOCK_INTERVAL;
	/** Рпзмер пула тридов */
	public static int THREAD_POOL_SIZE;
	/** Модель Трида. */
	public static int THREAD_MODEL;
	/** Хазмер трида пакетов */
	public static int PACKET_THREAD_POOL_SIZE;

	public static void load()
	{
		try
		{
			Config conf = new Config(FileName);

			DEADLOCK_INTERVAL = conf.getIntegerValue("threading", "DeadlockInterval", 10000);
			THREAD_POOL_SIZE = conf.getIntegerValue("threading", "ThreadPoolSize", 15);
			/**
			 * Модель тридинга
			 * 1 = Все пакеты выполняются синхронно, один за другим, нечто похожее использовалось до ревизии 71 включительно.L2F
			 * 2 = Все пакеты выполняются асинхронно, нечто похожее используется в L2J - SF
			 * 3 = Пакеты синхронизируются относительно приславшего их клиента, но клиенты между собой не синхронизируются. Требуется тестирование.
			 */
			THREAD_MODEL = conf.getIntegerValue("threading", "ThreadModel", 3);
			PACKET_THREAD_POOL_SIZE = conf.getIntegerValue("threading", "PacketThreadPoolSize", 1);
		}
		catch(IOException e)
		{
			_log.error("Не возможно загрузить файлы конфигурации.", e);
			System.exit(ExitCode.CODE_ERROR.getId());
		}
		catch(Exception e)
		{
			_log.error("Ошибка доступа к файлу или директории.", e);
			System.exit(ExitCode.CODE_ERROR.getId());
		}
		finally
		{
			_log.info(FileName + " Успешно загружен.");
		}
	}
}